//
//  MTool.h
//  DongLe
//
//  Created by up72_01 on 15/8/21.
//  Copyright (c) 2015年 up72_01. All rights reserved.
//


#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>
#import "MAlertView.h"

#import "sys/utsname.h"



typedef enum {
    /** nan */
    ChargingShareShowPickViewType_NAN = -1,
    /** 快充品牌 */
    ChargingShareShowPickViewType_fastChargingBrands = 0,
    /** 慢充品牌 */
    ChargingShareShowPickViewType_slowChargingBrands,
    /** 服务费类型 */
    ChargingShareShowPickViewType_servicefreeType,
}ChargingShareShowPickViewType;




@interface MTool : NSObject


+ (void)setToken:(NSString *)sender;
+ (NSString *)getToken;
+ (CGFloat)getScreenWidth;
+ (CGFloat)getScreenHeight;

+(void)showImage:(NSString *)image title:(NSString *)title inView:(UIView *)view withCGsize:(CGSize)size afterDelay:(CGFloat)timer;

+(void)showImage:(UIImageView *)avatarImageView;

+ (NSString *) md5:(NSString *)str;


+ (BOOL)firstOpenApp;

#pragma mark - 3des加解密
+ (NSString*)TripleDES:(NSString*)plainText encryptOrDecrypt:(CCOperation)encryptOrDecrypt;


+ (void)showMessage:(NSString *)message inView:(UIView *)view;


+ (CGSize)sizeWithText:(NSString *)text font:(UIFont *)font constrainedToSize:(CGSize)size;

#pragma mark - 将YYYY-MM-dd HH:mm:ss时间转换为MM-dd HH:mm的时间格式
/**
 * @brief   将YYYY-MM-dd HH:mm:ss时间转换为MM-dd HH:mm的时间格式
 * @param   uiDate    YYYY-MM-dd HH:mm:ss时间
 * @return  NSString   MM-dd HH:mm 时间
 */
+ (NSString *)convertDateStringFromString:(NSString*)uiDate;

+ (NSDate*)convertDateFromString:(NSString*)uiDate;

+ (NSDate *)stringDateToDate:(NSString *)dateString;


#pragma mark - 将13位时间转换为年月日时分秒
+ (NSString *)dateAllStringFromString:(NSString *)timeString;

+ (NSString *)datePartStringFromString:(NSString *)timeString;

/**
 时间字符串转时间戳字符串
 
 @param timeStr 格式化的时间字符串
 @param type @"yyyy-MM-dd"
 @return 时间戳字符串
 */
+ (NSString *)timeStrToTimeStampStr:(NSString *)timeStr type:(NSString *)type;

#pragma mark - 将13位时间转换为想要的时间格式
/**
 * @brief   将13位时间转换为想要的时间格式
 * @param   timeString    13位时间
 * @param   toFormat    格式（如：YYYY-MM-dd HH:mm:ss）
 * @return  NSString 时间
 */
+ (NSString *)dateStringFromString:(NSString *)timeString toFormat:(NSString *)toFormat;


+ (NSString *)dateToString:(NSDate *)sender;

+ (NSString *)DataTOjsonString:(id)object;

/*!
 * @brief 把格式化的JSON格式的字符串转换成字典
 * @param jsonString JSON格式的字符串
 * @return 返回字典
 */
+ (id)dictionaryWithJsonString:(NSString *)jsonString;

#pragma mark - 信息存储
//存储当前信息
+(BOOL)storeCurrentMessage:(NSDictionary *)curretnPersonDic;

//获取当前信息
+ (NSMutableDictionary  *)getCurrentMessage;

//清除当前信息
+ (void)removeCurrentMessage;

//存储用户名
+ (BOOL)storeCurrentUserName:(NSString *)userName;
//存储密码
+ (BOOL)storeCurrentUserPwd:(NSString *)userPwd;
//获取用户名
+ (NSString *)getUserName;
//存储密码
+ (NSString *)getUserPwd;

//存储当前刷新状态
+ (BOOL)storeCurrentRefresh:(NSString *)refresh;
//存储当前刷新时间间隔
+ (BOOL)storeCurrentRefreshTimeInterval:(NSString *)interval;

+ (BOOL)getCurrentRefresh;

+ (NSInteger)getCurrentRefreshTimeInterval;

#pragma mark - 正则校验
//校验手机号
+ (BOOL)isValidateMobile:(NSString *)mobile;
#pragma 车牌号验证
+ (BOOL) checkCarNumber:(NSString *) CarNumber;

//在window上显示信息
+ (void)showMessageToWidow:(NSString *)message key:(NSInteger)key;
//删除window上显示的信息
+ (void)removeMessageForKey:(NSInteger)key;

#pragma mark 存储数据缓存更新时间
+ (BOOL)storeCurrentUpDataTime:(NSString *)updataTime;
+ (NSString *)getCurrentUpDataTime;

#pragma mark 存储当前登陆状态
+ (BOOL)storeCurrentLoginState:(NSString *)loginStr;
+ (NSString *)getCurrentLastLoginState;


+ (NSString *)timeInfoWithDateString:(NSString *)dateString;
+ (int)intervalSinceNow:(NSString *)theDate;

/**
 * @brief   通过text view中的文字与宽度，计算出高度
 * @param   textView 要计算的textView
 * @return  CGSize  计算后的大小
 */
+ (CGSize)contentSizeHeightOfTextView:(UITextView *)textView;


/**
 * @brief   通过label中的文字与宽度，计算出高度
 * @param   label 要计算的label
 * @return  CGSize  计算后的大小
 */
+ (CGSize)contentSizeHeightOfLabel:(UILabel *)label;


/**
 * @brief   通过label中的文字与高度，计算出宽度
 * @param   label 要计算的label
 * @return  CGSize  计算后的大小
 */
+ (CGSize)contentSizeWidthOfLabel:(UILabel *)label;

/**
 * @brief   复制View
 * @param   view 要复制的view
 * @return  UIView  复制的View
 */
+ (UIView*)duplicate:(UIView*)view;

/**
 * @brief   检查是否是数组，数组长度是否大于0
 * @param   id 要检查的对象
 * @return  BOOL
 */
+ (BOOL)checkingIsArray:(id)sender;


/**
 * @brief   检查是否是string，长度是否大于0
 * @param   id 要检查的对象
 * @return  BOOL
 */
+ (BOOL)checkingIsString:(id)sender;

/**
 * @brief   检查是否是Dic，长度是否大于0
 * @param   id 要检查的对象
 * @return  BOOL
 */
+ (BOOL)checkingIsDic:(id)sender;


/**
 * @brief   读取plist文件，得到内容为DIC
 * @param   fileName plist名
 * @return  NSMutableDictionary
 */
+ (NSMutableDictionary *)readPlistToDic:(NSString *)fileName;

/**
 * @brief   将DIC写入到plist文件
 * @param   fileName plist名
 * @param   dataDic DIC
 */
+ (void)pushDicToPlist:(NSMutableDictionary *)dataDic fileName:(NSString *)fileName;


/**
 * @brief   读取plist文件，得到内容为Array
 * @param   fileName plist名
 * @return  NSMutableArray
 */
+ (NSMutableArray *)readPlistToArray:(NSString *)fileName;

/**
 * @brief   将Array写入到plist文件
 * @param   fileName plist名
 * @param   dataArray array
 */
+ (void)pushArrayToPlist:(NSMutableArray *)dataArray fileName:(NSString *)fileName;



/**
 * @brief   文件是否存在
 * @param   path 路径
 * @param   isCreate 如果不存在，是否创建  YES创建、NO不创建
 * @param   BOOL
 */
+ (BOOL)fileExists:(NSString *)path isCreate:(BOOL)isCreate;


/**
 * @brief   文件是否存在在Documents目录下
 * @param   name 文件名
 * @param   isCreate 如果不存在，是否创建  YES创建、NO不创建
 * @param   BOOL
 */
+ (BOOL)fileExistsForName:(NSString *)name isCreate:(BOOL)isCreate;




/**
 * @param sender 地区信息数组
 * @param province 要查询的省
 * @return NSDictionary 省信息
 */
+ (NSDictionary *)getProvince:(NSArray *)sender province:(NSString *)province;

/**
 * @param sender 地区信息数组
 * @param city 要查询的市
 * @return NSDictionary 市信息
 */
+ (NSDictionary *)getCity:(NSArray *)sender city:(NSString *)city;

//+ (void)cityMessageMark:(struct CityMessage)city toCityMessage:(struct CityMessage)sender;


/**
 * @brief   将信息写入到plist
 * @param   sender 信息DIC
 */
+ (void)pushDicToPlist:(NSMutableDictionary *)sender name:(NSString *)name;

/**
 * @brief   得到plist信息
 * @return  NSString 文件名
 */
+ (NSDictionary *)getDicFromPlist:(NSString *)name;



/**
 * @brief   打电话
 * @return  phoneNum 电话号码
 */
+ (void)callPhone:(NSString *)phoneNum;

+ (UIImage *)annotationImage:(NSDictionary *)sender;

+ (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size;


/**
 * @brief   设置圆角
 * @param   radius 圆角度数
 * @param   view
 */
+ (void)setViewRadius:(CGFloat)radius view:(id)view;


/**
 * @brief   描边
 * @param   borderWidth 边宽度
 * @param   color 颜色
 * @param   view
 */
+ (void)setViewBorder:(CGFloat)borderWidth color:(UIColor *)color view:(id)view;

/**
 * @brief   描边并加圆角
 * @param   borderWidth 边宽度
 * @param   color 颜色
 * @param   radius 圆角度数
 * @param   view
 */
+(void)setViewRadiusAndBorder:(CGFloat)borderWidth color:(UIColor *)color radius:(CGFloat)radius view:(id)view;

/**
 * @brief   设置UITextField左边距
 * @param   textField textField
 * @param   leftWidth 距离
 */
+ (void)setTextFieldLeftPadding:(UITextField *)textField forWidth:(CGFloat)leftWidth;


#pragma mark - 设备版本
//这个代码可以获取到具体的设备版本（已更新到iPhone 6s、iPhone 6s Plus），缺点是：采用的硬编码。具体的对应关系可以参考：https://www.theiphonewiki.com/wiki/Models
//这个方法可以通过AppStore的审核，放心用吧。
/**
 *  设备版本
 *
 *  @return e.g. iPhone 5S
 */
+ (NSString *)DeviceVersion;

+ (NSInteger)getBottomBarButtonIndex;
+ (void)setBottomBarButtonIndex:(NSInteger)sender;


+ (NSString *)getString:(NSString *)string;

/**
 向UserDefault内写入信息
 
 @param value 写入的信息
 @param key key
 */
+ (void)setUserDefaultsMsgWithValue:(NSString *)value ForKey:(NSString *)key;
/**
 获取UserDefault内信息
 
 @param key key
 @return 返回值
 */
+ (id)getUserDefaultsMsgWithKey:(NSString *)key;

/**
 获取蓝牙权限
 
 @param vc 当前控制器
 */
+ (void)applyBleRule:(UIViewController *)vc;


/**
 清除ios11scrollView类的头部20像素空白
 
 @param vc 控制器
 @param scrollView 需要操作的视图
 */
+ (void)clearScrollViewTopTwentyWhiteWithController:(UIViewController *)vc scrollView:(UIScrollView *)scrollView;
+ (void)addLoadingView:(NSString *)loadingText;
+ (void)removeLoadingView;


///**
// 检查图片地址是否正确
//
// @param imageUrl 图片地址
// @return 处理后的图片地址
// */
//+ (NSString *)checkImageURL:(NSString *)imageUrl;


/**
 把数字格式化成时间
 
 @param second 数字
 @return 时间字符串
 */
+ (NSString *)convertTime:(CGFloat)second;

@end
